package com.lxq.LeetCode.isPerfectSquare;

public class Solution {
    public static void main(String[] args) {
        System.out.println(isPerfectSquare(2147483647));
    }

    /**牛顿迭代法
     *
     * @param num
     * @return boolean
     */
    public static boolean isPerfectSquare(int num) {
        double x0 = num;
        while (true) {
            double x1 = (x0 + num / x0) / 2;
            if (x0 - x1 < 1e-6) {
                break;
            }
            x0 = x1;
        }
        int x = (int) x0;
        return x * x == num;
    }

//    /**
//     * 二分法
//     * @param num
//     * @return boolean
//     */
//    public static boolean isPerfectSquare(int num) {
//        return findSquare(num, 1, num);
//    }
//
//    public static boolean findSquare(int num, int min, int max) {
//        if (max < min) {
//            return false;
//        }
//        int mid = min + (max - min) / 2;
//        long square = (long) mid * mid;
//        if (square == num) {
//            return true;
//        }
//        if (square > num) {
//            max = mid - 1;
//        } else {
//            min = mid + 1;
//        }
//        return findSquare(num, min, max);
//    }
}
